#include "app_task.h"

static Task tasks[MAX_TASKS];  // 任务数组
static uint32_t numTasks = 0;  // 当前任务数量
volatile uint32_t msTicks = 0;  // 全局毫秒计数器

// 添加任务函数
int AddTask(const char *name, uint32_t period, void (*taskFunc)(void *), void *param) {
    if (numTasks >= MAX_TASKS) {
        return -1;  // 任务数组已满
    }
    
    strncpy(tasks[numTasks].name, name, 31);
    tasks[numTasks].name[31] = '\0';
    tasks[numTasks].period = period;
    tasks[numTasks].taskFunc = taskFunc;
    tasks[numTasks].param = param;
    tasks[numTasks].nextRunTime = msTicks + period;
    
    numTasks++;
    return 0;  // 成功添加任务
}

// 删除任务函数
int RemoveTask(const char *name) {
    for (uint32_t i = 0; i < numTasks; i++) {
        if (strncmp(tasks[i].name, name, 32) == 0) {
            // 找到任务，删除
            for (uint32_t j = i; j < numTasks - 1; j++) {
                tasks[j] = tasks[j + 1];
            }
            numTasks--;
            return 0;  // 成功删除任务
        }
    }
    return -1;  // 未找到任务
}

// 任务调度函数
void TaskScheduler(void) {
    for (uint32_t i = 0; i < numTasks; i++) {
        if (msTicks >= tasks[i].nextRunTime) {
            tasks[i].taskFunc(tasks[i].param);  // 执行任务
            tasks[i].nextRunTime = msTicks + tasks[i].period;  // 更新下次执行时间
        }
    }
}